# A tibble: 1 × 8
.y. group1 group2 n1 n2 statistic df p
* <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl>
1 Edad Mujer Varon 29 33 -0.871 59.6 0.387
Indicadores estadísticos
Encuentro 5
El paquete rstatix simplifica el proceso de realizar análisis estadísticos complejos.
# A tibble: 1 × 8
.y. group1 group2 n1 n2 statistic df p
* <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl>
1 Edad Mujer Varon 29 33 -0.871 59.6 0.387
Lo que nos permite conectar el resultado mediante tuberías hacia otras funciones del tidyverse, como select() o filter().
Tiene dos funciones de resumenes para variables cuantitativas y cualitativas:
# A tibble: 2 × 11
Sexo variable n min max median iqr mean sd se ci
<chr> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mujer Edad 29 18 93 57 39 55.7 23.9 4.44 9.10
2 Varon Edad 33 19 99 63 41 61.1 25.1 4.37 8.90
# A tibble: 2 × 3
Sexo n prop
<chr> <int> <dbl>
1 Mujer 31 46.3
2 Varon 36 53.7
El paquete janitor tiene numerosas funciones de las cuales vamos a destacar la familia tabyl.
La función tabyl() permite crear tablas de frecuencia de una variable o tablas de contingencia para dos o más variables categóricas.
El paquete además tiene otras funciones que se enlazan con tabyl para personalizar los resultados en estas tablas (por ejemplo, agregar totales o representar frecuencias realtivas como porcentajes)
Se puede personalizar la tabla conectando por tuberías el agregado de otras funciones del paquete.
library(janitor)
datos |>
tabyl(Sexo) |>
adorn_totals(where = "row") |>
adorn_pct_formatting(digits = 2) Sexo n percent
Mujer 31 46.27%
Varon 36 53.73%
Total 67 100.00%
Incorporamos totales con adorn_totals() y configuramos los porcentajes con adorn_pct_formatting().
Este paquete permite crear tablas de resumen elegantes y personalizables que destacan las estadísticas descriptivas, resultados de modelos, y comparaciones de grupos.
Estas tablas son esenciales para reportes, publicaciones y presentaciones, asegurando que la información clave sea fácilmente comprensible.
Las salidas buscan producir estéticas compatibles con las tablas que se envían a publicar en la mayoría de las revistas científicas, así como también en otras publicaciones similares.
Un ejemplo de una tabla descriptiva con variables cuanti y cuali estratificada por Sexo.
Este paquete es similar a otras librerías como gt, huxtable, kableExtra, etc, que transforman las tablas y dataframes de R en salidas elegantes.
La documentación oficial dice “crear tablas flexibles y altamente personalizables en formatos de Microsoft Word, PowerPoint y HTML”.
La elección de este paquete sobre las otras opciones tiene que ver con la amplitud de opciones en la compatibilidad de los formatos de salida.
Las funciones del paquete se integran facilmente con Quarto
Una tablita que creamos anteriormente con freq_table() de rstatix fue:
# A tibble: 2 × 3
Sexo n prop
<chr> <int> <dbl>
1 Mujer 31 46.3
2 Varon 36 53.7
La salida tradicional de consola se visualiza estéticamente fea.
Con flextable podemos configurar esa misma tabla, para mejorar su presentación:
library(flextable)
datos |> freq_table(Sexo) |>
flextable() |>
fontsize(size = 30, part = "all") |>
align(align = "center", part = "all") |>
line_spacing(space = 2, part = "all") |>
padding(padding = 6, part = "header") |>
set_header_labels(n = "Frecuencia", prop = "%") |>
theme_zebra()Sexo | Frecuencia | % |
|---|---|---|
Mujer | 31 | 46.3 |
Varon | 36 | 53.7 |
Las funciones nos permiten automatizar tareas comunes de una manera más potente y general que copiar y pegar.
Funciones vectoriales que toman uno o más vectores como entrada y devuelven un vector como salida.
Funciones de tablas de datos que toman un dataframe como entrada y devuelven un dataframe como salida.
Funciones gráficas que toman un dataframe como entrada y devuelven un gráfico como salida.
En el material de ajuste de tasas de esta unidad, hay un momento donde creamos grupos etarios regulares cada 5 años y tenemos el problema que las etiquetas de cut_interval() no coinciden con las leídas en las proyecciones de población.
Tomamos entonces el dataframe defunciones a la altura de tener EDAD y UNIEDAD antes de construir los grupos etarios.
# A tibble: 183,814 × 4
JURI EDAD UNIEDAD SEXO
<chr> <dbl> <dbl> <dbl>
1 06 86 1 1
2 06 66 1 2
3 06 84 1 1
4 06 90 1 2
5 06 73 1 2
6 06 60 1 2
7 06 72 1 2
8 06 77 1 2
9 06 78 1 1
10 06 78 1 2
# ℹ 183,804 more rows
El código que sigue es el trabajo que hay que hacer para generar los grupos y que sean coincidentes con los grupos de las proyecciones de población.
defunciones <- defunciones |>
mutate(EDAD = if_else(UNIEDAD > 1,
true = 0,
false = EDAD),
GRUPEDAD = cut_interval(EDAD,
length = 5,
right = F),
GRUPEDAD = as.character(GRUPEDAD),
GRUPEDAD = str_sub(GRUPEDAD,
start = 2,
end = str_length(GRUPEDAD)-1),
x = str_split_fixed(GRUPEDAD, ",",
n = 2),
x2 = as.numeric(x[,2])-1,
GRUPEDAD = str_c(x[,1],"-",x2),
GRUPEDAD = if_else(EDAD >= 80,
true ="80 y más",
false = GRUPEDAD)) |>
select(!c(x, x2, EDAD, UNIEDAD))Entonces podemos pensar en una función que automatice la tarea para aplicarla cada vez que la necesitemos.
grupo_5 <- function(datos, EDAD, UNIEDAD) {
datos |>
mutate(EDAD = if_else({{ UNIEDAD }} > 1,
true = 0,
false = {{ EDAD }}),
GRUPEDAD = cut_interval(EDAD,
length = 5,
right = F),
GRUPEDAD = as.character(GRUPEDAD),
GRUPEDAD = str_sub(GRUPEDAD,
start = 2,
end = str_length(GRUPEDAD)-1),
x = str_split_fixed(GRUPEDAD, ",",
n = 2),
x2 = as.numeric(x[,2])-1,
GRUPEDAD = str_c(x[,1],"-",x2),
GRUPEDAD = if_else(EDAD >= 80,
true ="80 y más",
false = GRUPEDAD)) |>
select(!c(x, x2, EDAD, UNIEDAD))
}Aplicamos la función a los datos defunciones
# A tibble: 183,814 × 3
JURI SEXO GRUPEDAD
<chr> <dbl> <chr>
1 06 1 80 y más
2 06 2 65-69
3 06 1 80 y más
4 06 2 80 y más
5 06 2 70-74
6 06 2 60-64
7 06 2 70-74
8 06 2 75-79
9 06 1 75-79
10 06 2 75-79
# ℹ 183,804 more rows
Instituto Nacional de Epidemiología